﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Onshi.POS.Formularios.Recursos;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objetos;
using Onshi.POS.Vendedores;
using Onshi.POS.Vendedores.Vistas;

namespace Onshi.POS.Formularios.Cliente
{
    public partial class VendedoresBajaHabilitacion : FormularioBase, IVendedoresBajaHabilitacion
    {
        #region Constructores

        public VendedoresBajaHabilitacion(Boolean esSeleccion)
        {
            InitializeComponent();
            btnSeleccionar.Visible = esSeleccion;
            presentador = new VendedoresBajaHabilitacionPresentador(this);
        }

        #endregion

        #region Atributos

        private List<TelefonoVendedor> listaTelefonos;
        private List<DomicilioVendedor> listaDomicilios;
        private DetalleVendedor detalle;
        private VendedoresBajaHabilitacionPresentador presentador;
        private Vendedor vendedorSelecionado;

        #endregion

        #region Propiedades

        public Vendedor VendedorSeleccionado
        {
            get { return vendedorSelecionado; }
        }

        public List<Vendedor> Lista
        {
            set { bsVendedores.DataSource = value; }
        }

        public Int32 IdVendedor
        {
            get { return ((Vendedor)bsVendedores.Current).Id; }
        }

        public List<TelefonoVendedor> ListaTelefonos
        {
            set { listaTelefonos = value; }
        }

        public List<DomicilioVendedor> ListaDomicilios
        {
            set { listaDomicilios = value; }
        }

        public DetalleVendedor Detalle
        {
            set { detalle = value; }
        }

        public Int32 IdRubroVendedorFiltro
        {
            get { return (Int32)ucRubroVendedorFiltro.cboRubrosVendedores.SelectedValue; }
        }

        public Byte IdTipoComosionVendedorFiltro
        {
            get { return (Byte)cboTipoComisionVendedorFiltro.SelectedValue; }
        }

        public String CodigoFiltro
        {
            get { return txtCodigoFiltro.Text; }
        }

        public String NombreFiltro
        {
            get { return txtNombreFiltro.Text; }
        }

        public String CuitFiltro
        {
            get { return mskCuitFiltro.Text; }
        }

        public Decimal ComisionDesdeFiltro
        {
            get { return ucComisionFiltro.Desde; }
        }

        public Decimal ComisionHastaFiltro
        {
            get { return ucComisionFiltro.Hasta; }
        }

        public Decimal ComisionMaximaDesdeFiltro
        {
            get { return ucComisionMaximaFiltro.Desde; }
        }

        public Decimal ComisionMaximaHastaFiltro
        {
            get { return ucComisionMaximaFiltro.Hasta; }
        }

        public EnumEstadoCheck EstaEliminadoFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkEstaEliminadoFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneDomiciliosFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneDomiciliosFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneTelefonosFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneTelefonosFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneObservacionFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneObservacionFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneImagenFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneImagenFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        public EnumEstadoCheck TieneInternetFiltro
        {
            get
            {
                var valor = EnumEstadoCheck.TODOS;
                switch (chkTieneInternetFiltro.CheckState)
                {
                    case CheckState.Checked:
                        valor = EnumEstadoCheck.SI;
                        break;
                    case CheckState.Indeterminate:
                        valor = EnumEstadoCheck.TODOS;
                        break;
                    case CheckState.Unchecked:
                        valor = EnumEstadoCheck.NO;
                        break;
                }
                return valor;
            }
        }

        #endregion

        #region Metodos

        private void LimpiarCamposFiltro()
        {
            txtNombreFiltro.Text = String.Empty;
            txtCodigoFiltro.Text = String.Empty;
            ucRubroVendedorFiltro.cboRubrosVendedores.SelectedValue = (Int32)EnumRubroVendedor.TODOS;
            mskCuitFiltro.Text = String.Empty;
            cboTipoComisionVendedorFiltro.SelectedValue = (Byte)EnumTipoComisionVendedor.TODOS;
            ucComisionFiltro.Limpiar();
            ucComisionMaximaFiltro.Limpiar();
            chkEstaEliminadoFiltro.CheckState = CheckState.Indeterminate;
            chkTieneDomiciliosFiltro.CheckState = CheckState.Indeterminate;
            chkTieneTelefonosFiltro.CheckState = CheckState.Indeterminate;
            chkTieneObservacionFiltro.CheckState = CheckState.Indeterminate;
            chkTieneImagenFiltro.CheckState = CheckState.Indeterminate;
            chkTieneInternetFiltro.CheckState = CheckState.Indeterminate;
        }

        #endregion

        #region Eventos

        private void VendedoresBusqueda_Load(Object sender, EventArgs e)
        {
            try
            {
                cboTipoComisionVendedorFiltro.ActualizarListado();
                ucRubroVendedorFiltro.ActualizarListado();
                presentador.Inicializar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnNuevo_Click(Object sender, EventArgs e)
        {
            try
            {
                var vendedoresAltaModificacion = new VendedoresAltaModificacion();
                vendedoresAltaModificacion.MinimizeBox = false;
                vendedoresAltaModificacion.MaximizeBox = false;
                if (vendedoresAltaModificacion.ShowDialog() == DialogResult.OK)
                {
                    presentador.Nuevo();
                    ucUltimaActualizacion.Actualizar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnModificar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsVendedores.Current != null)
                {
                    var vendedoresAltaModificacion = new VendedoresAltaModificacion(((Vendedor)bsVendedores.Current).Id);
                    vendedoresAltaModificacion.MinimizeBox = false;
                    vendedoresAltaModificacion.MaximizeBox = false;
                    if (vendedoresAltaModificacion.ShowDialog() == DialogResult.OK)
                    {
                        presentador.Modificar();
                        ucUltimaActualizacion.Actualizar();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnEliminar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsVendedores.Current != null)
                {
                    if (((Vendedor)bsVendedores.Current).Id != (Int32)EnumVendedor.TITULAR_DEL_COMERCIO)
                    {
                        if (MessageBox.Show("¿Esta seguro que desea eliminar el vendedor seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            presentador.Eliminar();
                            ucUltimaActualizacion.Actualizar();
                        }
                    }
                    else
                        MessageBox.Show("Este vendedor no se puede eliminar", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnHabilitar_Click(Object sender, EventArgs e)
        {
            try
            {
                if (bsVendedores.Current != null)
                {
                    if (((Vendedor)bsVendedores.Current).Id != (Int32)EnumVendedor.TITULAR_DEL_COMERCIO)
                    {
                        if (MessageBox.Show("¿Esta seguro que desea habilitar el vendedor seleccionado?", DatosComunes.NombreAplicacion, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                        {
                            presentador.Habilitar();
                            ucUltimaActualizacion.Actualizar();
                        }
                    }
                    else
                        MessageBox.Show("Este vendedor no se puede habilitar", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void btnLimpiar_Click(Object sender, EventArgs e)
        {
            LimpiarCamposFiltro();
        }

        private void btnVerDomicilios_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                var vendedor = ((Vendedor)bsVendedores.Current);
                if (vendedor.TieneDomicilios == true)
                {
                    var domiciliosVer = new DomiciliosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    domiciliosVer.MinimizeBox = false;
                    domiciliosVer.MaximizeBox = false;
                    domiciliosVer.ShowDialog();
                }
            }
        }

        private void btnVerTelefonos_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                var vendedor = ((Vendedor)bsVendedores.Current);
                if (vendedor.TieneTelefonos == true)
                {
                    var telefonosVer = new TelefonosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    telefonosVer.MinimizeBox = false;
                    telefonosVer.MaximizeBox = false;
                    telefonosVer.ShowDialog();
                }
            }
        }

        private void btnVerObservacion_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                var vendedor = ((Vendedor)bsVendedores.Current);
                if (vendedor.TieneObservacion == true)
                {
                    presentador.VerObservacion();
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.VENDEDOR, vendedor.Nombre, detalle.Observacion);
                    observacionVer.ShowDialog();
                }
            }
        }

        private void btnVerImagen_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                var vendedor = ((Vendedor)bsVendedores.Current);
                if (vendedor.TieneImagen == true)
                {
                    var imagenVer = new ImagenVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    imagenVer.MaximizeBox = false;
                    imagenVer.MinimizeBox = false;
                    imagenVer.ShowDialog();
                }
            }
        }

        private void btnVerInternet_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                var vendedor = ((Vendedor)bsVendedores.Current);
                if (vendedor.TieneInternet == true)
                {
                    var internetVer = new InternetVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    internetVer.MinimizeBox = false;
                    internetVer.MaximizeBox = false;
                    internetVer.ShowDialog();
                }
            }

        }

        private void btnImprimir_Click(Object sender, EventArgs e)
        {

        }

        private void btnSeleccionar_Click(Object sender, EventArgs e)
        {
            if (bsVendedores.Current != null)
            {
                vendedorSelecionado = (Vendedor)bsVendedores.Current;
                DialogResult = System.Windows.Forms.DialogResult.OK;
            }
            else
                MessageBox.Show("No hay ningun vendedor seleccionado", DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnActualizar_Click(Object sender, EventArgs e)
        {
            try
            {
                presentador.Actualizar();
                ucUltimaActualizacion.Actualizar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnSalir_Click(Object sender, EventArgs e)
        {
            Close();
        }

        private void grdClientes_CellFormatting(Object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (grdClientes.Columns[e.ColumnIndex].Name == colInternet.Name)
            {
                if (((Vendedor)bsVendedores.List[e.RowIndex]).TieneInternet == true)
                    e.Value = Properties.Resources.computer;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colObservacion.Name)
            {
                if (((Vendedor)bsVendedores.List[e.RowIndex]).TieneObservacion == true)
                    e.Value = Properties.Resources.page_copy;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colImagen.Name)
            {
                if (((Vendedor)bsVendedores.List[e.RowIndex]).TieneImagen == true)
                    e.Value = Properties.Resources.picture;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colTelefonos.Name)
            {
                if (((Vendedor)bsVendedores.List[e.RowIndex]).TieneTelefonos == true)
                    e.Value = Properties.Resources.telephone;
            }
            if (grdClientes.Columns[e.ColumnIndex].Name == colDomicilios.Name)
            {
                if (((Vendedor)bsVendedores.List[e.RowIndex]).TieneDomicilios == true)
                    e.Value = Properties.Resources.building;
            }
        }

        private void grdClientes_CellContentClick(Object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex != -1)
            {
                if (grdClientes.Columns[e.ColumnIndex].Name == colInternet.Name)
                {
                    var vendedor = ((Vendedor)bsVendedores.List[e.RowIndex]);
                    var internetVer = new InternetVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    internetVer.MinimizeBox = false;
                    internetVer.MaximizeBox = false;
                    internetVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colObservacion.Name)
                {
                    var vendedor = ((Vendedor)bsVendedores.List[e.RowIndex]);
                    presentador.VerObservacion();
                    var observacionVer = new ObservacionVer(EnumTipoEntidad.VENDEDOR, vendedor.Nombre, detalle.Observacion);
                    observacionVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colImagen.Name)
                {
                    var vendedor = ((Vendedor)bsVendedores.List[e.RowIndex]);
                    var imagenVer = new ImagenVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    imagenVer.MinimizeBox = false;
                    imagenVer.MaximizeBox = false;
                    imagenVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colTelefonos.Name)
                {
                    var vendedor = ((Vendedor)bsVendedores.List[e.RowIndex]);
                    var telefonosVer = new TelefonosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    telefonosVer.MinimizeBox = false;
                    telefonosVer.MaximizeBox = false;
                    telefonosVer.ShowDialog();
                }
                if (grdClientes.Columns[e.ColumnIndex].Name == colDomicilios.Name)
                {
                    var vendedor = ((Vendedor)bsVendedores.List[e.RowIndex]);
                    var domiciliosVer = new DomiciliosVer(EnumTipoEntidad.VENDEDOR, vendedor.Id);
                    domiciliosVer.MinimizeBox = false;
                    domiciliosVer.MaximizeBox = false;
                    domiciliosVer.ShowDialog();
                }
            }
        }

        #region Filtro

        private void txtCodigoFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void txtNombreFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void mskCuitFiltro_TextChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucRubroVendedorFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cboTipoComisionVendedorFiltro_SelectedIndexChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucComisionFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ucComisionMaximaFiltro_Cambio()
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkEstaEliminadoFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneDomiciliosFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneTelefonosFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneObservacionFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneImagenFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void chkTieneInternetFiltro_CheckStateChanged(Object sender, EventArgs e)
        {
            try
            {
                presentador.Filtrar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, DatosComunes.NombreAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

        #endregion
    }
}